package com.jvm;

import java.util.Properties;

/**
 * ClassName:Demo01
 * Package:com.jvm
 * Description:
 *
 * @Author:helei
 * @Create:2024/9/9 - 9:38
 */
public class Demo01 {

    /*
    类加载使用了双亲委派机制加载类
        加载一个类的时候，由AppClassLoader 交给 PlatformClassLoader加载
        PlatformClassLoader加载时，先交给BootStrapClassLoader  加载
        BootStrapClassLoader直接加载，加载成功返回
        BootStrapClassLoader加载失败，返回由PlatformClassLoader加载
        PlatformClassLoader加载成功，直接返回
        PlatformClassLoader加载失败，返回由AppClassLoader加载
        AppClassLoader加载成功，直接返回
        AppClassLoader加载失败，抛异常ClassNotFoundException‘
        优点：沙箱机制（保证系统类的安全）
     */
    public static void main(String[] args) {
        //AppClassLoader 系统类加载器/应用类加载器
        System.out.println(Demo01.class.getClassLoader());
        //下面两个 基于运行时所在的系统配置的环境变量JAVA_HOME查找类文件
        //PlatformClassLoader 平台类加载器
        System.out.println(Demo01.class.getClassLoader().getParent());
        //null:BootStrapClassLoader 基于C实现，java中无法获取使用
        System.out.println(Demo01.class.getClassLoader().getParent().getParent());

        ClassLoader classLoader = String.class.getClassLoader();
        System.out.println(classLoader);

        //查看jdk运行时的参数
        //1、获取appClassLoader加载类文件路径
        //2、运行时系统的参数
        Properties properties = System.getProperties();
        properties.forEach((k, v) -> {
            System.out.println("k = " + k + ",v = " + v);
        });

    }
}
